#ifndef __MATRIX_H__
#define __MATRIX_H__

namespace t2c2 {
// This enum helps to create a identity matrix on Constructor.
enum matrix_type {
	NORMAL_MATRIX = 0,
	IDENTITY_MATRIX,
};

class Vector; //Forward Declaration
class Matrix {
public:
	Matrix(const unsigned int& = 1,const unsigned int& = 1, const unsigned int& = NORMAL_MATRIX);
	Matrix(const Matrix&);
	~Matrix(void);
	
	unsigned int get_row(void) const;
	unsigned int get_column(void) const;
	
	void print(void) const;
	
	double* operator[] (unsigned int) const;
	Matrix  operator-  (void) const;
	
	Matrix transpose(void) const;
	Vector to_vector(unsigned int = 0) const;
	Matrix& operator= (const Matrix&);
	
private:
	unsigned int row, column;
	double **data;
};

Matrix operator+(const Matrix&,const Matrix&);
Matrix operator-(const Matrix&,const Matrix&);
Matrix operator*(const Matrix&,const Matrix&);
Matrix operator*(const Matrix&,double);

}

#endif
